using System;

[Serializable]
public class Realm
{
    // 境界
    public string realm;
    // 等阶
    public string rank;
    // 层级
    public string layer;
    // 等级
    public int level;
    // 经验: [现有的, 升级所需的]
    public Number exp;

    public string BTCondition;

    public Realm(string realm, string rank, string layer, int level, Number exp, string BTCondition)
    {
        this.realm = realm;
        this.rank = rank;
        this.layer = layer;
        this.level = level;
        this.exp = exp;
        this.BTCondition = BTCondition;
    }
}

[Serializable]
public class CreatureStats
{
    // 境界
    public Realm R;
    public Number EXP;

    // 九大主属性: 
    // CON(Constitution): 体质-生命, 物防, 法防, 韧性, 回血, 物理抗性加成
    public NP CON = new NP();
    // MIN(Mind): 精神-魔力, 回魔, 法术抗性加成
    public NP MIN = new NP();
    // VIT(Vitality): 耐力-精力, 回精, 韧性, 承重能力
    public NP VIT = new NP();
    // STR(Strength): 力量-物攻, 生命, 消韧, 物理效果加成
    public NP STR = new NP();
    // INT(Intelligence): 智力-法攻, 回魔, 法术效果加成
    public NP INT = new NP();
    // DEX(Dexterity): 灵巧-掉落伤害, 抗暴, 施法时间, 战技时间
    public NP DEX = new NP();
    // AGI(Agility): 敏捷-闪避, 移速, 攻速, 回精
    public NP AGI = new NP();
    // ARC(Arcane): 感应-暴击, 命中, 抗性穿透, 效果抵抗
    public NP ARC = new NP();
    // LUK(Luck): 幸运-暴击, 抗暴, 闪避, 命中, 概率发生事件, 物品掉落概率
    public NP LUK = new NP();

    // 基础三大属性
    // 生命: 维持生存的基础
    // 基础值 = 100 + CON * 10 + STR
    public NP HP = new NP();
    // 魔力: 释放魔法的能量
    // 基础值 = 50 + MIN * 6
    public NP MP = new NP();
    // 精力: 释放战技的能量
    // 基础值 = 50 + VIT * 6
    public NP ENE = new NP();

    // 攻击类属性: 
    // 物理攻击: 由非魔力凝聚的攻击
    // 基础值 = 10 + 2 * STR
    public NP PATK = new NP();
    // 法术攻击: 由魔力凝聚的攻击
    // 基础值 = 10 + 2 * INT
    public NP MATK = new NP();
    // 暴击率: 造成额外伤害的概率
    // 基础值 = (1 + 0.01 * ARC + 0.001 * LUK)%
    public NP CRIT = new NP();
    // 暴击伤害: 造成额外伤害的倍率(无法通过主属性获得)
    // 基础值 = 100%
    public NP CRITDMG = new NP();
    // 暴击抵抗: 受到暴击时豁免为单倍伤害的概率
    // 基础值 = (0.01 * DEX + 0.001 * LUK)%
    public NP CRITRES = new NP();
    // 攻击速度: 一秒钟可以攻击的次数
    // 基础值 = 1 + AGI ^ 0.1 * ln(AGI / 2 + 1)
    public DP ATKS = new DP();
    // 施法时间削减: 魔法释放时的前摇时间削减
    // 基础值 = (50 * (tanh(DEX / 1000) + DEX / (DEX + DEX ^ 0.9 + 1000)))%
    public DP CAS = new DP();
    // 战技时间削减: 战技释放时的前摇时间削减
    // 基础值 = (50 * (tanh(DEX / 1000) + DEX / (DEX + DEX ^ 0.9 + 1000)))%
    public DP SAS = new DP();
    // 技能冷却时间削减: 技能冷却时间削减
    // 基础值 = 0%(无法通过主属性获得)
    public DP CDR = new DP();
    // 消韧: 物理攻击附带的消除对手的韧性
    // 基础值 = 0.1 * STR
    public NP TENR = new NP();
    // 物理防御穿透: 无视物理防御的比率
    // 基础值 = (0)% (无法通过主属性获得)
    public DP PENPD = new DP();
    // 法术防御穿透: 无视法术防御的比率
    // 基础值 = (0)% (无法通过主属性获得)
    public DP PENMD = new DP();

    // 效果加成类属性: 
    // 物理技能效果加成
    // 基础值 = (0.001 * STR)%
    public DP PEFF = new DP();
    // 无属性法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP NEMEFF = new DP();
    // 水系法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP WAMEFF = new DP();
    // 火系法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP FMEFF = new DP();
    // 冰系法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP IMEFF = new DP();
    // 风系法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP WIMEFF = new DP();
    // 土系法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP EMEFF = new DP();
    // 雷系法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP TMEFF = new DP();
    // 圣光法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP LMEFF = new DP();
    // 暗系法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP DAMEFF = new DP();
    // 生命法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP HMEFF = new DP();
    // 死亡法术效果加成
    // 基础值 = (0.001 * INT)%
    public DP DEMEFF = new DP();

    // 抗性加成类属性: 
    // 物理抗性加成
    // 基础值 = (0.001 * CON)%
    public DP PRES = new DP();
    // 无属性法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP NEMRES = new DP();
    // 水系法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP WAMRES = new DP();
    // 火系法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP FMRES = new DP();
    // 冰系法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP IMRES = new DP();
    // 风系法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP WIMRES = new DP();
    // 土系法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP EMRES = new DP();
    // 雷系法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP TMRES = new DP();
    // 圣光法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP LMRES = new DP();
    // 暗系法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP DAMRES = new DP();
    // 生命法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP HMRES = new DP();
    // 死亡法术抗性加成
    // 基础值 = (0.001 * MIN)%
    public DP DEMRES = new DP();

    // 抗性穿透类属性: 
    // 物理抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP PRP = new DP();
    // 无属性法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP NEMRP = new DP();
    // 水系法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP WAMRP = new DP();
    // 火系法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP FMRP = new DP();
    // 冰系法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP IMRP = new DP();
    // 风系法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP WIMRP = new DP();
    // 土系法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP EMRP = new DP();
    // 雷系法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP TMRP = new DP();
    // 圣光法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP LMRP = new DP();
    // 暗系法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP DAMRP = new DP();
    // 生命法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP HMRP = new DP();
    // 死亡法术抗性穿透
    // 基础值 = (0.001 * ARC)%
    public DP DEMRP = new DP();

    // 防御类属性: 物理防御, 法术防御, 物理免伤, 法术免伤, 韧性
    // 物理防御: 抵挡物理伤害的程度
    // 基础值 = 0.8 * CON
    public NP PDEF = new NP();
    // 法术防御: 抵挡法术伤害的程度
    // 基础值 = 0.8 * CON
    public NP MDEF = new NP();
    // 物理免伤
    // 基础值 = (0)% (无法通过主属性获得)
    public DP PDR = new DP();
    // 法术免伤
    // 基础值 = (0)% (无法通过主属性获得)
    public DP MDR = new DP();
    // 韧性: 维持动作不被打断的能力
    // 基础值 = 0.6 * CON + 0.8 * VIT
    public NP TEN = new NP();
    // 特殊法术效果抵抗
    // 基础值 = (50 * (tanh(ARC / 1000) + ARC / (ARC + ARC ^ 0.9 + 1000)))%
    public DP DMGDBR = new DP();

    // 其他属性: 
    // 承重能力
    // 基础值 = 10 + 0.5 * VIT
    public NP LBC = new NP();
    // 掉落伤害减免
    // 基础值 = (50 * (tanh(DEX / 1000) + DEX / (DEX + DEX ^ 0.9 + 10000)))%
    public DP FALIN = new DP();
    // 闪避率
    // 基础值 = (AGI ^ 0.2 * ln(AGI + 1) + 0.001 * LUK)%
    public DP EVA = new DP();
    // 命中率
    // 基础值 = (ARC ^ 0.2 * ln(ARC + 1) + 0.001 * LUK)%
    public DP HIT = new DP();
    // 最大移速
    // 基础值 = 8 + AGI ^ 0.8
    public NP MOVS = new NP();
    // 范围加成
    // 基础值 = (0)% (无法通过主属性获得)
    public DP RAN = new DP();
    // 物品掉落概率加成
    // 基础值 = (LUK ^ 0.2 * ln(LUK + 1))%
    public DP DR = new DP();
    // 反伤
    // 基础值 = (0)% (无法通过主属性获得)
    public DP REFIN = new DP();
    // 吸血
    // 基础值 = (0)% (无法通过主属性获得)
    public DP LD = new DP();
    // 回血
    // 基础值 = 0.01 * CON + 0.005 * STR
    public NP RETHP = new NP();
    // 回蓝
    // 基础值 = 0.01 * MIN + 0.005 * INT
    public NP RETMP = new NP();
    // 回精
    // 基础值 = 0.01 * VIT + 0.005 * AGI
    public NP RETENE = new NP();

    // 临时属性:
    // 护盾
    public DP SHIL = new DP();

    // 技能: [技能名称, 技能效果]
    // public List<Skill> skill = new List<Skill>();
    // 状态效果: [效果名称, 属性表, 数值表, 单位表, 持续时间]
    // public List<State> state = new List<State>();
}